'''
----------------版本  v2.0-----------
需求：
     1 - 需要传递一个对应的接口的筛选的条件
     2 - 提供扩展性  以后可能需要获取用例标题
数据处理思维：
    1 - 直接获取数据，在登录的业务代码去转化
    2 - 在获取数据的 源头就把数据搞好
分析需求：
解决方案：
    1 - 我们不清楚后续需要获取那些数据-- 可以考虑使用可变数量参数  *args
        1 - 像url   不是json -- 不需要转化
        2 - 像请求的body，是json -- 需要转化
测试反馈：
    1 - 外卖自动化业务代码，都需要字典类型-- excel 获取出来是 字符串类型
    2 - 提供扩展性  以后可能需要获取用例标题
    3 - 做测试 -- 冒烟测试 -- 不是全部去执行所有用例
    pytest框架的定制化执行
        1 - mark  指定对应的接口自动化 -- 不能选择里面的具体某一用例
        2 - 数据层定制   数据驱动，我们筛选出我们需要执行的用例条数
版本迭代建议：

'''
import os.path

import xlrd
from utils.handle_path import testData_path
def get_excel_data(excelDir,sheetName,caseName,*args):  # 返回是列表
    # 1 打开一个文件   formatting_info=True 保持原样式
    workbook = xlrd.open_workbook(excelDir,formatting_info=True)
    # 2 获取对应的子表
    # sheets = workbook.sheet_names()
    # print(sheets)
    workSheet = workbook.sheet_by_name(sheetName)
    # 3 - 获取一系列数据
    # print(workSheet.col_values(0))
    # # 4 - 获取一行数据
    # print(workSheet.row_values(0))
    #
    # # 5 - 获取单元格数据 -- workSheet,cell(行编号，列编号)
    # print(workSheet.cell(0,0).value)

    '''
    --------------v2.0新增功能-----------------
    *args ----元组类型  ('URL','标题','请求体')
    
    
    需求分析用户传入需要获取的列，代码去获取对应的列的单元格数据
    方案：
        1 用户可以这样去调函数  直接传递列编号 1，3，5，6， ----args
            get_excel_data(excelDir,sheetName,caseName,1,3,5,6)
            感受：
                1- 代码可读性差 
                2 - 内部操作起来是方便
        1 用户可以这样去调函数  直接传递 ('URL','标题','请求体') -- args
            get_excel_data(excelDir,sheetName,caseName ,'URL','标题','请求体')
            感受：
                1- 代码可读性好，好理解业务需求
                2 - 内部操作起来是不方便  需要把列名 -- 转化为 -- 列编号
                
    '''
    colIndexList = []  # 存放用户输入列名对应的列编号
    for i in args:  # ('URL','标题','请求体') 遍历
        colIndexList.append(workSheet.row_values(0).index(i))  # 获取编号
    print(colIndexList)

    reslist = []
    rowIndex = 0  # 行编号初始值
    for one in workSheet.col_values(0):
        if caseName in one:
            #遍历列编号
            getColData = []
            for num in colIndexList:
                tmp = workSheet.cell(rowIndex,num).value
                getColData.append(tmp)
            reslist.append(list(getColData))  #[(),()]
        rowIndex += 1  #行编号 + 1  下一行操作
    # print(reslist)
    for one in reslist:
        print(one)







if __name__ == '__main__':
    fileDir = os.path.join(testData_path,'res.xls')
    get_excel_data(fileDir,'登录模块','Login','URL','标题','前置条件')  #后面加caseName 只取Login 的请求和响应


